<?php
/**
 * 短信服务
 * User: zucheng
 * Date: 2019/3/20
 */
namespace App\Services;

use App\Contracts\SmsContract;
use App\Library\R;
use Overtrue\EasySms\EasySms;
use Overtrue\EasySms\Message;

class SmsService implements SmsContract
{
    /**
     * 发送短信
     * @param $phone 手机号
     * @param Message $message 短信内容对象
     * @return \Illuminate\Http\JsonResponse
     */
    public function send($phone, Message $message)
    {
        try {
            $sms = new EasySms(config('sms'));

            /**
             * 返回数据格式
             * [
             *  'yunpian' => [
             *      'gateway' => 'yunpian',
             *      'status' => 'success',
             *      'result' => [...] // 平台返回值
             *  ],
             *  'juhe' => [
             *      'gateway' => 'juhe',
             *      'status' => 'failure',
             *      'exception' => \Overtrue\EasySms\Exceptions\GatewayErrorException 对象
             *  ],
             *  //...
             * ]
             */
            $ret = $sms->send($phone, $message);

            return R::success('success', $ret);
        } catch (\Overtrue\EasySms\Exceptions\NoGatewayAvailableException $e) {
            /**
             * 所选网关列表均发送失败时将会抛出异常
             * $e->getResults();               // 返回所有 API 的结果，结构同上
             * $e->getExceptions();            // 返回所有调用异常列表
             * $e->getException($gateway);     // 返回指定网关名称的异常对象
             * $e->getLastException();         // 获取最后一个失败的异常对象
             */
            return R::error('请求过于频繁', $e->getExceptions());
        } catch (\Exception $e) {
            return R::error($e->getMessage());
        }
    }

}